package com.zhiwen.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhiwen.domain.dto.QuestionDTO;
import com.zhiwen.domain.entity.Question;
import com.zhiwen.domain.vo.QuestionVO;

/**
 * 问题服务接口
 */
public interface QuestionService extends IService<Question> {

    /**
     * 创建问题
     */
    QuestionVO createQuestion(QuestionDTO questionDTO);

    /**
     * 更新问题
     */
    QuestionVO updateQuestion(QuestionDTO questionDTO);

    /**
     * 删除问题
     */
    void deleteQuestion(Long id);

    /**
     * 获取问题详情
     */
    QuestionVO getQuestionDetail(Long id);

    /**
     * 分页查询问题列表
     */
    Page<QuestionVO> getQuestionPage(Long categoryId, String keyword, Integer status, Page<Question> page);

    /**
     * 分页查询问题列表(重载方法)
     *
     * @param page 分页对象
     * @param wrapper 查询条件
     * @return 问题分页对象
     */
    Page<QuestionVO> getQuestionPage(Page<Question> page, LambdaQueryWrapper<Question> wrapper);

    /**
     * 增加问题浏览量
     */
    void incrementViewCount(Long id);

    /**
     * 更新问题状态
     */
    void updateQuestionStatus(Long id, Integer status);

    /**
     * 获取热门问题
     */
    Page<QuestionVO> getHotQuestions(Page<Question> page);

    /**
     * 获取等待回答的问题
     */
    Page<QuestionVO> getWaitingQuestions(Page<Question> page);

    /**
     * 获取用户问题列表
     *
     * @param userId 用户ID
     * @param page 分页对象
     * @return 问题分页对象
     */
    Page<QuestionVO> getUserQuestions(Long userId, Page<Question> page);

    /**
     * 获取推荐问题
     *
     * @param page 分页对象
     * @return 问题分页对象
     */
    Page<QuestionVO> getRecommendQuestions(Page<Question> page);

    /**
     * 获取关注用户的问题
     *
     * @param page 分页对象
     * @return 问题分页对象
     */
    Page<QuestionVO> getFollowingUserQuestions(Page<Question> page);
}
